package com.decent.util;

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * @author 王雪杰
 * @date 2021/11/22 14:30
 */
@Slf4j
public class ImportExcelUtil {
    /**
     * 读取发货表
     *
     * @param file 文件
     * @return List<SaleOrder>
     * @throws IOException IOException
     */
    public static <T> List<T> importExcel(MultipartFile file, Class<T> t) throws IOException {
        // 接收解析出的目标对象（T）
        List<T> list = new ArrayList<>();
        // 这里指定读用T去读，然后读取第一个sheet 文件流会自动关闭
        EasyExcel.read(file.getInputStream(), t, new AnalysisEventListener<T>() {
            // 每解析一条数据都会调用该方法
            @Override
            public void invoke(T dto, AnalysisContext analysisContext) {
                list.add(dto);
            }

            // 解析完毕的回调方法
            @Override
            public void doAfterAllAnalysed(AnalysisContext analysisContext) {
                log.info("导入表读取完毕:共[{}]行", list.size());
            }
        }).sheet().doRead();
        return list;
    }
}
